package cn.tedu.work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
import java.util.concurrent.TimeoutException;

/**
 * 模拟工作队列模式中的生产者
 */
public class WorkProducer {
    //先准备一个main方法
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接工厂对象 ConnectionFactory
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.8.100");//设置RabbitMQ的IP地址,这里用的是虚拟机里面的rabbitmq
        connectionFactory.setPort(5672);//设置RabbitMQ的端口号,这里5672是默认的端口号，也可以不写
        connectionFactory.setUsername("tom");//设置用户名
        connectionFactory.setPassword("tom");//设置密码
        connectionFactory.setVirtualHost("/");//设置虚拟主机,如果不指定，默认是 “/”

        //1. 创建tcp连接对象connection（通过ConnectionFactory创建）
        Connection connection = connectionFactory.newConnection();

        //2. 创建channel连接对象（通过Connection创建）
        Channel channel = connection.createChannel();

        //3.通过channel创建队列
        /**
         * 第一个参数：队列的名称
         * 第二个参数：队列是否持久化
         * 第三个参数：队列是否独占
         * 第四个参数：队列是否自动删除
         * 第五个参数：其他属性设置
         */
        channel.queueDeclare("work.queue",true,false,false,null);

        //4. 生产者准备数据 --- 在控制台中输入
        while (true){
            String msg = new Scanner(System.in).nextLine();
            if (msg.equals("quit") ){
                //6. 关闭连接
                channel.close();
            }
            //5.发送数据
            /**
             * 第一个参数，写成"" ,双引号之间不要加空格
             * 第二个参数，先写成队列名，后续再将其他的作用
             * 第三个参数，其他属性配置，先写成null
             * 第四个参数，发送的数据，需要将要发送的数据转成byte[]
             */
            channel.basicPublish("","work.queue", MessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes(StandardCharsets.UTF_8));
        }
    }
}
